#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

//地址空间
int g_val=100;
int g_unval;
int main(int argc,char*argv[],char*env[])
{
    printf("code addr:%p\n",main);
    printf("init data addr :%p\n",&g_val);
    printf("uninit data addr:%p\n",&g_unval);

    


    char*heap=(char*)malloc(20);
    char*heap1=(char*)malloc(20);
    char*heap2=(char*)malloc(20);
    char*heap3=(char*)malloc(20);
    static int c=0;

    printf("heap addr:%p\n",heap);
    printf("heap addr:%p\n",heap1);
    printf("heap addr:%p\n",heap2);
    printf("heap addr:%p\n",heap3);
    
    printf("stack addr:%p\n",&heap);
    printf("stack addr:%p\n",&heap1);
    printf("stack addr:%p\n",&heap2);
    printf("stack addr:%p\n",&heap3);

    printf("c addr:%p\n",&c);

    for(int i=0;argv[i];i++)
    {
        //命令行参数表地址
      //  printf("&argv[%d]=%p\n",i,argv+i);//
        //命令行参数地址
        printf("&argv[%d]=%p\n",i,argv[i]);//
    }

    for(int i=0;env[i];i++)
    {
        //环境变量表
       // printf("&env[%d]=%p\n",i,env+i);
        //环境变量
        printf("&env[%d]=%p\n",i,env[i]);
    }
    return 0;
}










//int main()//打印查看环境变量
//{
   //const char*myenv=getenv("myenv");
   // const char*myenv=getenv("hello");

   // if(myenv==NULL)
   // {
   //     printf("geenv get null\n");
   // }
   // else
   // {
   //     printf("myenv=%s\n",myenv);
   // }



//    extern char**environ;
//    for(int i=0;environ[i];i++)
//    {
//        printf("environ[%d]: %s\n",i,environ[i]);
//    }
//    return 0;
//}




//getenv
//int main(int argc,char*argv[],char*env[])
//{
//    const char *username=getenv("USER");
//    if(strcmp(username, "root")==0 || strcmp(username, "LYL") ==0)
//    {
//        printf("this is my process core function\n");
//    }
//    else
//    {
//        printf("你没有权限\n");
//    }
//
//
//
//    //const char *username=getenv("USER");
//    //if(username)printf("username: %s\n", username);
//    //else printf("None\n");
//    //return 0;
//}



//int main(int argc,char*argv[],char*env[])
//{
//    printf("I am process,pid:%d, ppid: %d\n",getpid(),getppid());
//    for(int i=0;env[i];i++)
//    {
//        printf("----------env[%d]->%s\n",i,env[i]);
//    }
//
//    int id=fork();
//    if(id==0)
//    {
//        printf("--------------------------------------");
//        
//        printf("I am child,pid:%d, ppid: %d\n",getpid(),getppid());
//        for(int i=0;env[i];i++)
//        {
//            printf("----------env[%d]->%s\n",i,env[i]);
//        }
//    }
//    sleep(1);
//
//    return 0;
//}














//要实现三种不同的功能
//  ./myprocess -3

//int main(int argc, char *argv[])
//{
//
//    if(argc != 4)
//    {
//        printf("Usage:\n\t%s -[add|sub|mul|div] x y\n\n", argv[0]);
//        return 1;
//    }
//    
//    int x = atoi(argv[2]);
//    int y = atoi(argv[3]);
//    
//    if(strcmp("-add", argv[1]) == 0)
//    {
//        printf("%d+%d=%d\n", x, y, x+y);
//    }
//    else if(strcmp("-sub", argv[1]) == 0)
//    {
//        printf("%d-%d=%d\n", x, y, x-y);
//    }
//    else if(strcmp("-mul", argv[1]) == 0)
//    {
//        printf("%d*%d=%d\n", x, y, x*y);
//    }
//    else
//    {
//        printf("unknown!\n");
//    }
    
    

    //if(argc!=2)
    //{
    //    printf("Usage:\n\t%s -number[1-3]\n",argv[0]);
    //    return 1;
    //}

    //if(strcmp("-1",argv[1])==0)
    //{
    //    printf("function 1\n");
    //}
    //else if(strcmp("-2",argv[1])==0)
    //{
    //    printf("function 2\n");
    //}

    //else if(strcmp("-3",argv[1])==0)
    //{
    //    printf("function 3\n");
    //}
    //else
    //{
    //    printf("unknown\n");
    //}

    //for(int i=0;argv[i];i++)
    //{
    //    printf("argv[%d]:%s\n",i,argv[i]);
    //}


    //for(int i=0;i<argc;i++)
    //{
    //    printf("argv[%d]:%s\n",i,argv[i]);
    //}
    //return 0;
//}
